/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package argtrust.argtrustgraph;

import argtrust.argsys.Argument;
import argtrust.argsys.Defeat;
import argtrust.logic.FactInferenceNode;
import argtrust.logic.RuleInferenceNode;
import argtrust.trustnet.Agent;
import java.io.PrintWriter;

/**
 *
 * @author Yuqing Tang
 */
public interface IArgTrustDrawing {

    public void drawAgent(Agent agent, IGraphAttribute attribute);

    public void drawBeliefEdge(Agent agent, Argument arg, Object arg_component, IGraphAttribute attribute);

    public void drawDefeatEdge(Defeat defeat, IGraphAttribute attribute);

    public void drawFactNode(Argument arg, FactInferenceNode fact_node, IGraphAttribute attribute);

    /**
     * Draw the inference edge.
     * TODO: Draw only the inference node that can be reached by the query agent.
     * @param arg
     * @param inf_node
     */
    public void drawInfEdge(Argument arg, Object arg_component_head, Object arg_component_tail, IGraphAttribute attribute);

    public void drawRuleConclusionNode(Argument arg, RuleInferenceNode rule_node, IGraphAttribute attribute);

    public void drawRuleNode(Argument arg, RuleInferenceNode rule_node, IGraphAttribute attribute);

    public void drawTrustLink(Agent truster, Agent trustee, IGraphAttribute attribute);

    public void end();

    public void endArgument();

    public void setOut(PrintWriter out);

    public void start(IGraphAttributeFactory graph_factory);

    public void startArgument(Argument arg, IGraphAttributeFactory attribute_factory);

    public void startTrustnet(IGraphAttributeFactory attribute_factory);

    public void endTrustnet();
}
